//package com.example.websocket.excel.util;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.jdy169.common.enums.SignEnum;
//
//import java.nio.charset.StandardCharsets;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.Iterator;
//import java.util.Map;
//import java.util.TreeMap;
//
//public class BaixinZhikeSignUtils {
//
//	/**
//	 * UTF-8 编码格式内容签名
//	 * @param param
//	 * @param signKey
//	 * @return
//	 */
//	public static String sign(Object param, String signKey) {
//		// 利用TreeMap的key升序排列特性，将参数以其参数名的字典升序进行排序
//		TreeMap<String, Object> map = new TreeMap<>();
//		// 日期格式 yyyy-MM-dd HH:mm:ss
//		JSONObject json = JSON.parseObject(JSON.toJSONStringWithDateFormat(param, JSON.DEFFAULT_DATE_FORMAT));
//		Iterator<Map.Entry<String, Object>> iterator = json.entrySet().iterator();
//		while (iterator.hasNext()) {
//			Map.Entry<String, Object> entry = iterator.next();
//			String key = entry.getKey();
//			Object value = entry.getValue();
//			// 排除签名字段，并且非空参数才参与签名
//			if (!"sign".equals(key) && value != null && !"".equals(value.toString())) {
//				map.put(entry.getKey(), entry.getValue());
//			}
//		}
//		// 以字符串'key1=value1&key2=value2'的形式进行拼接生成签名字符串
//		StringBuffer stringSignTemp = new StringBuffer();
//		iterator = map.entrySet().iterator();
//		while (iterator.hasNext()) {
//		    Map.Entry<String, Object> entry = iterator.next();
//		    String key = entry.getKey();
//		    Object value = entry.getValue();
//		    stringSignTemp.append(key).append("=").append(value).append("&");
//		}
//		// 加key
//		stringSignTemp.append("key=").append(signKey);
//		System.out.println("待签名字符串 stringSignTemp: " + stringSignTemp);
//		// 签名
//		String sign = null;
//		// 签名类型
//		String signType = json.getString("signType");
//		if (SignEnum.SHA1.getCode().equalsIgnoreCase(signType)) {
//			sign = sha1(stringSignTemp.toString());
//		} else if (SignEnum.SHA256.getCode().equalsIgnoreCase(signType)) {
//			sign = sha256(stringSignTemp.toString());
//		} else {
//			sign = md5(stringSignTemp.toString());
//		}
//		System.out.println("签名 sign:" + sign);
//		return sign;
//	}
//
//	/**
//	 * 利用java原生的类实现md5加密
//	 * @param string
//	 * @return
//	 */
//	public static String md5(String string) {
//		String encodeStr = "";
//		try {
//			MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//			messageDigest.update(string.getBytes(StandardCharsets.UTF_8));
//			encodeStr = getString(messageDigest.digest());
//		} catch (NoSuchAlgorithmException e) {
//			e.printStackTrace();
//		}
//		return encodeStr;
//	}
//
//	/**
//	 * 利用java原生的类实现SHA1加密
//	 * @param string
//	 * @return
//	 */
//	public static String sha1(String string) {
//		String encodeStr = "";
//		try {
//			MessageDigest messageDigest = MessageDigest.getInstance("SHA");
//			messageDigest.update(string.getBytes(StandardCharsets.UTF_8));
//			encodeStr = byte2Hex(messageDigest.digest());
//		} catch (NoSuchAlgorithmException e) {
//			e.printStackTrace();
//		}
//		return encodeStr;
//	}
//
//	/**
//	 * 利用java原生的类实现SHA256加密
//	 * @param string  加密后的报文
//	 * @return
//	 */
//	public static String sha256(String string) {
//		String encodeStr = "";
//		try {
//			MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
//			messageDigest.update(string.getBytes(StandardCharsets.UTF_8));
//			encodeStr = byte2Hex(messageDigest.digest());
//		} catch (NoSuchAlgorithmException e) {
//			e.printStackTrace();
//		}
//		return encodeStr;
//	}
//
//	/**
//	 * 将byte转为16进制
//	 * @param bytes
//	 * @return
//	 */
//	private static String byte2Hex(byte[] bytes) {
//		StringBuilder stringBuffer = new StringBuilder();
//		String temp;
//		for (int i = 0; i < bytes.length; i++) {
//			temp = Integer.toHexString(bytes[i] & 0xFF);
//			if (temp.length() == 1) {
//				// 1得到一位的进行补0操作
//				stringBuffer.append("0");
//			}
//			stringBuffer.append(temp);
//		}
//		return stringBuffer.toString();
//	}
//
//	private static String getString(byte[] b) {
//		StringBuilder buf = new StringBuilder();
//		for (int value: b) {
//			int a = value;
//			if (a < 0) {
//				a += 256;
//			}
//			if (a < 16) {
//				buf.append("0");
//			}
//			buf.append(Integer.toHexString(a));
//		}
//		return buf.toString();
//	}
//}
